package top.yj95.xiets.panel;

import java.awt.Color;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JLayeredPane;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.WindowConstants;

/**
 * 文章《<a href="https://xiets.blog.csdn.net/article/details/74366560" target="_balnk">JavaSwing_3.5: JLayeredPane（层级面板）</a>》中的示例代码
 * @author 杨军
 * @since 2023-12-26
 */
public class JLayeredPaneDemo {

    public static void main(String[] args) {
        JFrame frame = new JFrame("测试窗口");
        frame.setSize(300, 300);
        frame.setLocationRelativeTo(null);
        frame.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        
        JLayeredPane layeredPanel = new JLayeredPane();
        
        // 层数：100
        JPanel panel1001 = createPanel(Color.RED, "L=100, P=1", 30, 30, 100, 100);
        layeredPanel.add(panel1001, Integer.valueOf(100));
        
        // 层数：200，层内位置：0（层内顶部）
        JPanel panel2000 = createPanel(Color.GREEN, "L=200, P=0", 70, 70, 100, 100);
        layeredPanel.add(panel2000, Integer.valueOf(200), 0);
        
        // 层数：200，层内位置：1
        JPanel panel2001 = createPanel(Color.CYAN, "L=200, P=1", 110, 110, 100, 100);
        layeredPanel.add(panel2001, Integer.valueOf(200), 1);
        
        // 层数：300
        JPanel panel300 = createPanel(Color.YELLOW, "L=300", 150, 150, 100, 100);
        layeredPanel.add(panel300, Integer.valueOf(300));
        
        frame.setContentPane(layeredPanel);
        frame.setVisible(true);
    }
    
    /**
     * 创建一个面板容器（窗口内包含一个水平方向居中，垂直方向顶部对齐的标签）
     * @param bg 窗口背景颜色
     * @param text 容器内标签显示的文本
     * @param x 容器的横轴坐标
     * @param y 容器的纵轴坐标
     * @param width 容器的宽度
     * @param height 容器的高度
     * @return 面板容器
     * @author 杨军
     * @since 2023-12-27
     */
    private static JPanel createPanel(Color bg, String text, int x, int y, int width, int height) {
        // 创建一个 JPanel，使用 1行 1列 的风格布局
        JPanel panel = new JPanel(new GridLayout(1, 1));
        
        // 设置容器的位置和宽高
        panel.setBounds(x, y, width, height);
        
        // 设置 pnale 的背景
        panel.setOpaque(true);
        panel.setBackground(bg);
        
        // 创建标签并设置相应属性
        JLabel label = new JLabel(text);
        label.setHorizontalAlignment(SwingConstants.CENTER);
        label.setVerticalAlignment(SwingConstants.TOP);
        
        // 添加标签到容器
        panel.add(label);
        
        return panel;
    }
    
}
